/**
 * 
 */
package org.yelongframework.model.generator.freemarker.datamodel;

import java.util.List;
import java.util.Objects;

import org.yelongframework.core.support.ExtendAttributeSupport;
import org.yelongframework.model.generator.manager.GenModelAndTable;

/**
 * 模板模型
 * 
 * @since 1.0.0
 */
public class ModelGenModelDataModel extends ExtendAttributeSupport {

	private static final long serialVersionUID = -2761097568783258179L;

	/** 模型表 */
	private final GenModelAndTable genModelAndTable;

	/** 模型包 */
	private String modelPackage;

	/** 表名称 */
	private String tableName;

	/** 表别名 */
	private String tableDesc;

	/** 模型名称 */
	private String modelName;

	/** 模型名称首字母小写 */
	private String modelNamePrefixLowerCase;

	/** 作者 */
	private String author;

	/** 父类型名称 */
	private String superClassName;

	/** 父类型简单名称 */
	private String superClassSimpleName;

	/** 模型字段集合 */
	private List<ModelGenModelFieldDataModel> modelFields;

	// ==================================================构造器==================================================

	/**
	 * @param genModelAndTable 模型表
	 */
	public ModelGenModelDataModel(GenModelAndTable genModelAndTable) {
		this.genModelAndTable = Objects.requireNonNull(genModelAndTable, "genModelAndTable");
	}

	// ==================================================模型表==================================================

	/**
	 * @return 模型表
	 */
	public GenModelAndTable getGenModelAndTable() {
		return genModelAndTable;
	}

	// ==================================================模型包==================================================

	/**
	 * @return 模型包
	 */
	public String getModelPackage() {
		return modelPackage;
	}

	/**
	 * @param modelPackage 模型包
	 */
	public void setModelPackage(String modelPackage) {
		this.modelPackage = modelPackage;
	}

	// ==================================================表名称==================================================

	/**
	 * @return 表名称
	 */
	public String getTableName() {
		return tableName;
	}

	/**
	 * @param tableName 表名称
	 */
	public void setTableName(String tableName) {
		this.tableName = tableName;
	}

	// ==================================================表别名==================================================

	/**
	 * @return 表别名
	 */
	public String getTableDesc() {
		return tableDesc;
	}

	/**
	 * @param tableDesc 表别名
	 */
	public void setTableDesc(String tableDesc) {
		this.tableDesc = tableDesc;
	}

	// ==================================================模型名称==================================================

	/**
	 * @return 模型名称
	 */
	public String getModelName() {
		return modelName;
	}

	/**
	 * @param modelName 模型名称
	 */
	public void setModelName(String modelName) {
		this.modelName = modelName;
	}

	// ==================================================模型名称首字母小写==================================================

	/**
	 * @return 模型名称首字母小写
	 */
	public String getModelNamePrefixLowerCase() {
		return modelNamePrefixLowerCase;
	}

	/**
	 * @param modelNamePrefixLowerCase 模型名称首字母小写
	 */
	public void setModelNamePrefixLowerCase(String modelNamePrefixLowerCase) {
		this.modelNamePrefixLowerCase = modelNamePrefixLowerCase;
	}

	// ==================================================作者==================================================

	/**
	 * @return 作者
	 */
	public String getAuthor() {
		return author;
	}

	/**
	 * @param author 作者
	 */
	public void setAuthor(String author) {
		this.author = author;
	}

	// ==================================================父类型名称==================================================

	/**
	 * @return 父类型名称
	 */
	public String getSuperClassName() {
		return superClassName;
	}

	/**
	 * @param superClassName 父类型名称
	 */
	public void setSuperClassName(String superClassName) {
		this.superClassName = superClassName;
	}

	// ==================================================父类型简单名称==================================================

	/**
	 * @return 父类型简单名称
	 */
	public String getSuperClassSimpleName() {
		return superClassSimpleName;
	}

	/**
	 * @param superClassSimpleName 父类型简单名称
	 */
	public void setSuperClassSimpleName(String superClassSimpleName) {
		this.superClassSimpleName = superClassSimpleName;
	}

	// ==================================================模型字段集合==================================================

	/**
	 * @return 模型字段集合
	 */
	public List<ModelGenModelFieldDataModel> getModelFields() {
		return modelFields;
	}

	/**
	 * @param modelFields 模型字段集合
	 */
	public void setModelFields(List<ModelGenModelFieldDataModel> modelFields) {
		this.modelFields = modelFields;
	}

}
